home *** CD-ROM | disk | FTP | other *** search
- {$G+} { Enable 286 Instructions }
- Unit Palette;
-
- { Programmed By David Dahl }
-
- (* PUBLIC DOMAIN *)
-
- Interface
-
- Type PaletteRec = Record
- Red,
- Green,
- Blue : Byte;
- End;
- PaletteType = Array[0..255] of PaletteRec;
- PalettePtr = ^PaletteType;
-
- Procedure SetPalette (Var PalBuf : PaletteType);
- Procedure GetPalette (Var PalBuf : PaletteType);
-
- Procedure BlackPalette;
- Procedure FadeInFromBlack (Var Palin : PaletteType);
- Procedure FadeInFromBlackQ (Var Palin : PaletteType;
- Intensity : Word);
- Procedure FadeOutToBlack (Var Palin : PaletteType);
- Procedure FadeFromPalToPal (Var OldPal, NewPal : PaletteType);
- Procedure FadeFromPalToPalQ (Var OldPal, NewPal : PaletteType;
- Color : Word);
-
-
- Var BlackP : PaletteType;
- WhiteP : PaletteType;
-
- TempPal : PaletteType;
-
- Implementation
-
- {-[ Set Value Of All DAC Registers ]--------------------------------------}
- Procedure SetPalette (Var PalBuf : PaletteType); Assembler;
- Asm
- PUSH DS
-
- XOR AX, AX { Palette Start = 0 }
- MOV CX, 0300h / 2
- LDS SI, PalBuf { Load DS:SI With Address Of PalBuf (For OUTSB) }
-
- MOV DX, 03C8h { Tell VGA Card What DAC Color To Start With }
- OUT DX, AL
-
- INC DX { Set DX To Equal DAC Data Port }
- MOV BX, DX
- CLD
-
- { Wait For V-sync }
- MOV DX, 03DAh
- @VSYNC0:
- IN AL, DX
- TEST AL, 8
- JZ @VSYNC0
-
- MOV DX, BX
- REP
- OUTSB
-
- MOV BX, DX
-
- { Wait For V-sync }
- MOV DX, 03DAh
- @VSYNC1:
- IN AL, DX
- TEST AL, 8
- JZ @VSYNC1
-
- MOV DX, BX
- MOV CX, 0300h / 2
- REP
- OUTSB
-
- POP DS
- End;
-
- {-[ Get Value Of All DAC Registers ]--------------------------------------}
- Procedure GetPalette (Var PalBuf : PaletteType); Assembler;
- Asm
- PUSH DS
-
- XOR AX, AX { Palette Start = 0 }
- MOV CX, 0300h
- LES DI, PalBuf { Load ES:DI With Address Of PalBuf (For INSB) }
-
- MOV DX, 03C7h { Tell VGA Card What DAC Color To Start With }
- OUT DX, AL
-
- INC DX { Set DX To Equal DAC Data Port }
- INC DX
- CLD
-
- REP
- INSB
-
- POP DS
- End;
-
-
- Procedure BlackPalette;
- Begin
- SetPalette (BlackP);
- End;
-
- Procedure FadeInFromBlack (Var Palin : PaletteType);
- Var DAC,
- Intensity : Word;
- Begin
- For Intensity := 0 to 32 do
- Begin
- For DAC := 0 to 255 do
- Begin
- TempPal[DAC].Red := (Palin[DAC].Red * Intensity) DIV 32;
- TempPal[DAC].Green := (Palin[DAC].Green * Intensity) DIV 32;
- TempPal[DAC].Blue := (Palin[DAC].Blue * Intensity) DIV 32;
- End;
-
- SetPalette (TempPal);
- End;
- End;
-
- Procedure FadeInFromBlackQ (Var Palin : PaletteType;
- Intensity : Word);
- Const DAC : Word = 0;
- Begin
- For DAC := 0 to 255 do
- Begin
- TempPal[DAC].Red := (Palin[DAC].Red * Intensity) DIV 32;
- TempPal[DAC].Green := (Palin[DAC].Green * Intensity) DIV 32;
- TempPal[DAC].Blue := (Palin[DAC].Blue * Intensity) DIV 32;
- End;
-
- SetPalette (TempPal);
- End;
-
- Procedure FadeOutToBlack (Var Palin : PaletteType);
- Var DAC,
- Intensity : Word;
- Begin
- For Intensity := 32 downto 0 do
- Begin
- For DAC := 0 to 255 do
- Begin
- TempPal[DAC].Red := (Palin[DAC].Red * Intensity) DIV 32;
- TempPal[DAC].Green := (Palin[DAC].Green * Intensity) DIV 32;
- TempPal[DAC].Blue := (Palin[DAC].Blue * Intensity) DIV 32;
- End;
-
- SetPalette (TempPal);
- End;
- End;
-
-
- Procedure FadeFromPalToPal (Var OldPal, NewPal : PaletteType);
- Var DAC,
- Color : Word;
- Begin
- For Color := 32 downto 0 do
- Begin
- For DAC := 0 to 255 do
- Begin
- TempPal[DAC].Red := ((OldPal[DAC].Red * Color) DIV 32) +
- ((NewPal[DAC].Red * (32 - Color)) DIV 32);
- TempPal[DAC].Green := ((OldPal[DAC].Green * Color) DIV 32) +
- ((NewPal[DAC].Green * (32 - Color)) DIV 32);
- TempPal[DAC].Blue := ((OldPal[DAC].Blue * Color) DIV 32) +
- ((NewPal[DAC].Blue * (32 - Color)) DIV 32);
- End;
-
- SetPalette (TempPal);
- End;
- End;
-
- Procedure FadeFromPalToPalQ (Var OldPal, NewPal : PaletteType;
- Color : Word);
- Const DAC : Word = 0;
- Begin
- For DAC := 0 to 255 do
- Begin
- TempPal[DAC].Red := ((OldPal[DAC].Red * (32 - Color)) DIV 32)+
- ((NewPal[DAC].Red * Color) DIV 32);
- TempPal[DAC].Green := ((OldPal[DAC].Green * (32 - Color)) DIV 32)+
- ((NewPal[DAC].Green * Color) DIV 32);
- TempPal[DAC].Blue := ((OldPal[DAC].Blue * (32 - Color)) DIV 32)+
- ((NewPal[DAC].Blue * Color) DIV 32);
- End;
-
- SetPalette (TempPal);
- End;
-
- Var Counter : Word;
- Begin
- For Counter := 0 to 255 do
- Begin
- BlackP[Counter].Red := 0;
- BlackP[Counter].Green := 0;
- BlackP[Counter].Blue := 0;
- End;
-
- For Counter := 0 to 255 do
- Begin
- WhiteP[Counter].Red := 63;
- WhiteP[Counter].Green := 63;
- WhiteP[Counter].Blue := 63;
- End;
- End.
-